home *** CD-ROM | disk | FTP | other *** search
/ Top 200 Programs / Top 200 Programs.iso / Bob8 / THOMPSON / LIBERTY / PRODUCT / LB14W.EXE / TERMINAL.BAS < prev    next >
BASIC Source File  |  1997-02-27  |  4KB  |  131 lines

  1.  
  2.  
  3.     'TERMINAL.BAS   -  A Liberty BASIC comms example
  4.     'Requires Liberty BASIC v1.31 for Windows
  5.     'This program is to demonstrate the use of a communications port in Liberty
  6.     'BASIC and is in no way intended to be useful for anything else.
  7.  
  8.     'Notes:
  9.     '#comm is the handle for our comm port (we are using com2.  Change it if your modem
  10.     '      is not on com2. 
  11.  
  12.     '#window is the handle for our window
  13.  
  14.     '#window.te is the handle for our texteditor.  To display on-screen, we print to this
  15.  
  16.     '#window.gb is the handle for our graphicbox.  This object is outside the borders of
  17.     '      our window so that it is hidden, and this is where we get the user keystrokes
  18.  
  19.     'Also, we use lof(#comm) to find out how many characters are waiting to be read from
  20.     '      the com port, and we read those characters using the input$() function.
  21.  
  22.     nomainwin
  23.  
  24.     WindowWidth = 400
  25.     WindowHeight = 300
  26.     texteditor #window.te, 0, 0, 391, 254     'The handle for our texteditor is #window.te
  27.     graphicbox #window.gb, 800, 1, 10, 10
  28.     open "kb" for window as #window           'The handle for our window is #window
  29.     print #window.gb, "when characterInput [getChar]"   'When the user presses a key go to [getChar]
  30.     print #window, "trapclose [quit]"    'When the user closes our terminal window, go to [quit]
  31.     print #window.te, "!autoresize";   'Tell the texteditor to resize with the terminal window
  32.  
  33.     prompt "Please give me a phone #"; phone$
  34.  
  35.     'Set the size of the communications buffer to 16K
  36.     Com = 8192 * 2
  37.  
  38.     'Open communications port 2.  It's handle is #comm.
  39.     'If you need to change to com 1, this is the line to modify
  40.     open "COM2:19200,n,8,1,ds0" for random as #comm
  41.  
  42.     'Reset the modem, wait 3 seconds for OK
  43.     'This next section of code sends a reset, then waits for a response
  44.     print #comm, "ATZ"     'Send ATZ to reset the modem
  45.     print #window.te, "Attempting to reset modem..."   'Display to screen
  46.     counter = 0
  47.     ok = 0
  48.     okTime$ = time$()
  49.     entireResponse$ = ""
  50.     while counter < 3 and ok = 0
  51.         if lof(#comm) > 0 then
  52.             response$ = input$(#comm, lof(#comm))
  53.             entireResponse$ = entireResponse$ + response$
  54.             print #window.te, response$;
  55.             if instr(entireResponse$, "OK") > 0 then ok = 1
  56.         end if
  57.         if okTime$ <> time$() then
  58.             okTime$ = time$()
  59.             counter = counter + 1
  60.         end if
  61.     wend
  62.     if ok = 0 then
  63.         notice "Modem is not responding.  Please check your configuration."
  64.         goto [quit]
  65.     end if
  66.  
  67.  
  68.  
  69.     'Wait 20 seconds for CONNECT or BUSY
  70.     'This section has similar timeout code to the reset modem section
  71.     print #window.te, "Dialing phone.  Will wait 20 secs for CONNECT."
  72.     print #comm, "ATDT"; phone$    'Send ATDT and phone number to dial modem
  73.     counter = 0
  74.     ok = 0
  75.     okTime$ = time$()
  76.     entireResponse$ = ""
  77.     while counter < 20 and ok = 0
  78.         if lof(#comm) > 0 then
  79.             response$ = input$(#comm, lof(#comm))
  80.             print #window.te, response$;
  81.             entireResponse$ = entireResponse$ + response$
  82.             if instr(entireResponse$, "CONNECT") > 0 then ok = 1
  83.             if instr(entireResponse$, "BUSY") > 0 then ok = -1
  84.         end if
  85.         if okTime$ <> time$() then
  86.             okTime$ = time$()
  87.             counter = counter + 1
  88.         end if
  89.     wend
  90.     if ok = 0 then
  91.         notice "CONNECT TIMEOUT"
  92.         goto [quit]
  93.     end if
  94.     if ok = -1 then
  95.         notice "Phone # " + phone$ + " is busy.  Exiting."
  96.         goto [quit]
  97.     end if
  98.  
  99.  
  100. [loop]
  101.  
  102.     'This is where our program spends most of its time after a successful CONNECT
  103.  
  104.     'If we want to capture keystrokes from our graphicbox, then it always needs
  105.     'to have the input focus.  The next line ensures that it always does.
  106.     print #window.gb, "setfocus"
  107.  
  108.     t$ = input$(#comm, lof(#comm))    'Get com port data
  109.     if t$ <> "" then print #window.te, t$;    'Display com port data
  110.  
  111.     scan    'Check for input events
  112.  
  113.     goto [loop]
  114.  
  115.  
  116. [getChar]
  117.  
  118.     'Whenever the user presses a key, we go here to process it.
  119.  
  120.     c$ = Inkey$
  121.     'Send the character to the com port only if it is not a special keycode
  122.     if len(c$) = 1 then print #comm, c$;
  123.     goto [loop]
  124.  
  125.  
  126. [quit]
  127.  
  128.     close #window
  129.     close #comm
  130.     end
  131.